package jmine.tec.services.annotations;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import jmine.tec.services.api.ActionsEnum;

/**
 * Implementadores de servicos devem incluir esta anotacao.
 */
@Documented
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface ServiceImplementor {

    /**
     * Devolve o tipo da acao
     */
    ActionsEnum action();

    /**
     * Para sobrescrever o nome do servico
     */
    String serviceName() default "";

    /**
     * O nome do método que é a execução deste serviço.
     */
    String executeMethodName() default "";

    /**
     * se true, vai usar defaults para procurar propriedades. Por default, vai olhar metodos setXXX para propriedades obrigatorias e vai
     * colocar como saida os metodos getXXX.
     * 
     * @deprecated não usar por enquanto
     */
    boolean autoDescribe() default false;

    /**
     * Se true, este servico é stateless após construído. Os clientes deste serviço podem compartilhar instâncias deste serviço.
     */
    boolean stateless() default false;

}
